package com.sadam.ui4.Data;

import static com.sadam.ui4.ActivityLogin.SHARED_PREFRENCES_CURRENT_USER;

import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.util.Log;
import android.widget.Toast;

import com.sadam.ui4.Utils.ImageUtils;

/**
 * User 类：表示一个“用户”实体，包含用户的基本信息（ID、用户名、密码），
 * 并管理与该用户相关的数据库操作（登录、注册、保存、获取笔记等）。
 * 该类是应用中的核心数据模型之一。
 */
public class User {
    private Long id;
    private String name;
    private String password;
    private String selfIntroduction; // 个人介绍默认值
    private MySqLiteOpenHelper mySqLiteOpenHelper;
    private String avatarPath; // 存储头像文件路径（null 表示使用默认头像）


    /**
     * 构造函数：用于从数据库加载用户时创建 User 对象。
     *
     * @param mySqLiteOpenHelper 数据库操作帮助类
     * @param id                 用户的唯一 ID
     * @param name               用户名
     * @param password           用户密码
     */
    public User(MySqLiteOpenHelper mySqLiteOpenHelper, Long id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.mySqLiteOpenHelper = mySqLiteOpenHelper;
    }

    /**
     * 数据封装构造函数（仅用于数据传输，不可 save()）
     * 建议仅用于非数据库场景（如网络模型）
     */
    public User(Long id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }


    /**
     * 注册专用构造函数（ID 为 null，自动保存）
     */
    public User(MySqLiteOpenHelper mySqLiteOpenHelper, String username, String password) {
        this(mySqLiteOpenHelper, null, username, password);
    }

    public static User login(MySqLiteOpenHelper mySqLiteOpenHelper, String username, String password) {
        Context context = mySqLiteOpenHelper.getContext();
        User user = mySqLiteOpenHelper.getUserByName(username);
        if (user == null) {
            Toast.makeText(context, "用户名：" + username + "不存在！", Toast.LENGTH_LONG).show();
            return null;
        } else {
            if (user.getPassword().equals(password)) {
                Toast.makeText(context, "用户：" + username + "登陆成功！", Toast.LENGTH_LONG).show();
                return user;
            } else {
                Toast.makeText(context, "密码错误！", Toast.LENGTH_LONG).show();
                return null;
            }
        }
    }

    public static User register(MySqLiteOpenHelper mySqLiteOpenHelper, String username, String password) {
        User user = mySqLiteOpenHelper.getUserByName(username);
        if (user == null) {
            user = new User(mySqLiteOpenHelper, username, password);
            user.setSelfIntroduction("设置你的个人简介吧！"); // 在这里设置默认个人简介
            user.save(); // 会触发 insertUser，并传入该值
            Toast.makeText(mySqLiteOpenHelper.getContext(), "注册成功！", Toast.LENGTH_LONG).show();
            return user;
        } else {
            Toast.makeText(mySqLiteOpenHelper.getContext(), "该用户名已存在，请使用其他的用户名！", Toast.LENGTH_LONG).show();
            return null;
        }
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    // 添加个人简介的 getter 和 setter
    public String getSelfIntroduction() {
        return selfIntroduction;
    }

    public void setSelfIntroduction(String selfIntroduction) {
        this.selfIntroduction = selfIntroduction;
    }

    public MySqLiteOpenHelper getMySqLiteOpenHelper() {
        return mySqLiteOpenHelper;
    }

    public Long getId() {
        return id;
    }

    /**
     * 设置用户名
     * 注意：这个方法只更新内存中的值，需要调用 save() 方法保存到数据库
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 设置密码
     * 注意：这个方法只更新内存中的值，需要调用 save() 方法保存到数据库
     */
    public void setPassword(String password) {
        this.password = password;
    }

    // 存储用户信息
    public User save() {
        if (mySqLiteOpenHelper == null) {
            throw new IllegalStateException("无法保存用户：mySqLiteOpenHelper 为 null！");
        }
        if (this.id == null) {
            // 插入新用户（insertUser 需要支持 avatarPath）
            this.id = mySqLiteOpenHelper.insertUser(name, password, selfIntroduction, avatarPath);
        } else {
            // 更新已有用户，✅ 把 avatarPath 也传进去
            mySqLiteOpenHelper.updateUser(id, name, password, selfIntroduction, avatarPath);
        }
        return this;
    }

    /**
     * 修改用户个人简介并保存到数据库
     */
    public void updateSelfIntroduction(String newIntro) {
        // 先设置新值
        this.selfIntroduction = newIntro;
        // 再保存到数据库
        save();
    }

    //获取头像存储文件路径
    public String getAvatarPath() {
        return avatarPath;
    }

    //设置头像存储路径
    public void setAvatarPath(String avatarPath) {
        this.avatarPath = avatarPath;
    }

    public Bitmap getAvatarBitmap(Context context) {
        if (avatarPath == null || avatarPath.isEmpty() || avatarPath.equals(ImageUtils.DEFAULT_AVATAR)) {
            return null; // 返回 null，表示使用默认头像
        }
        return ImageUtils.loadAvatar(context, this.getId()); // 使用用户 ID 加载头像文件
    }

    /**
     * 保存用户头像 Bitmap 到私有目录，并更新数据库中的 avatarPath。
     * 成功后可通过 getAvatarBitmap() 读取。
     *
     * @param context 上下文环境
     * @param bitmap  要保存的头像 Bitmap
     * @return 成功返回 true，失败返回 false（例如 bitmap 为 null 或写入失败）
     */
    public boolean saveAvatarBitmap(Context context, Bitmap bitmap) {
        if (this.id == null) {
            Log.e("User", "无法保存头像：用户 ID 为 null，尚未保存到数据库！");
            return false;
        }

        if (bitmap == null) {
            Log.w("User", "尝试保存空头像，用户 ID: " + this.id);
            return false;
        }

        // 使用 ImageUtils 保存头像文件
        String newAvatarPath = ImageUtils.saveAvatar(context, bitmap, this.id);
        if (newAvatarPath != null) {
            // 保存成功，更新内存中的字段
            this.avatarPath = newAvatarPath;

            // 立即更新数据库，确保数据持久化
            try {
                this.save(); // 这会调用 updateUser 方法
                Log.d("User", "头像保存成功，路径: " + newAvatarPath + "，用户ID: " + this.id);
                return true;
            } catch (Exception e) {
                Log.e("User", "更新数据库失败: " + e.getMessage());
                return false;
            }
        } else {
            Log.e("User", "头像文件保存失败，用户 ID: " + this.id);
            return false;
        }
    }


    public void debugPrintUserInfo() {
        Log.d("User", "=== 用户信息 ===");
        Log.d("User", "ID: " + id);
        Log.d("User", "用户名: " + name);
        Log.d("User", "个人简介: " + selfIntroduction);
        Log.d("User", "头像路径: " + avatarPath);
        Log.d("User", "是否使用默认头像: " + (avatarPath == null || avatarPath.isEmpty()));
    }
    // User.java
    public static User getCurrentUser(Context context, MySqLiteOpenHelper dbHelper) {
        SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFRENCES_CURRENT_USER, Context.MODE_PRIVATE);
        long id = prefs.getLong("id", -1);
        if (id == -1) return null; // 未登录

        String name = prefs.getString("name", null);
        String password = prefs.getString("password", null);
        String intro = prefs.getString("selfIntroduction", "设置你的个人简介吧！");
        String avatarPath = prefs.getString("avatarPath", null);

        User user = new User(dbHelper, id, name, password);
        user.setSelfIntroduction(intro);
        user.setAvatarPath(avatarPath);
        return user;
    }
}
